package com.bsgogogo.exception;

import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import com.bsgogogo.common.Result;
import com.bsgogogo.common.ResultCode;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;

//异常拦截器
//业务层抛出的异常（均会被该异常拦截器捕捉并处理），设置相应的提示信息，作为结果响应给前端，好做业务判断

//请求处理方法，这个方法的返回值就是需要传递给前端的数据
//自动将异常对象传递给此方法的参数列表上
//当前项目中产生了异常，都会被统一拦截到此方法中，这个方法此时充当的是请求处理方法，方法的返回值直接给到前端

//统一异常处理@ExceptionHandler,主要用于Exception

@ControllerAdvice(basePackages="com.bsgogogo.controller")
public class GlobalExceptionHandler {

    private static final Log log = LogFactory.get();


    @ExceptionHandler(Exception.class) //用于统一处理抛出的异常
    @ResponseBody//返回json串
    public Result error(HttpServletRequest request, Exception e){
        log.error("异常信息：",e);
        return Result.error();
    }

    @ExceptionHandler(CustomException.class) //用于统一捕获
    @ResponseBody//返回json串
    public Result customError(HttpServletRequest request, CustomException e){
        return Result.error(e.getCode(), e.getMsg());
    }
}
